/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.pedidos.servidor.rn;

import br.com.pedidos.servidor.dao.PedidoDAO;
import br.com.pedidos.servidor.entity.Mesa;
import br.com.pedidos.servidor.entity.Pedido;
import java.io.Serializable;
import java.util.List;

/**
 *
 * @author Weslley
 */
public class PedidoRN implements Serializable{
    
    private static final long serialVersionUID = 1L;
    
    PedidoDAO pedidoDAO;
    
    public PedidoRN() {
        this.pedidoDAO = new PedidoDAO();
    }
    
    public void salvaPedido(Pedido p) {
        pedidoDAO.startOperation();
        pedidoDAO.save(p);
        pedidoDAO.stopOperation(true);
    }
    
    public void atualizaPedido(Pedido p) {
        pedidoDAO.startOperation();
        pedidoDAO.update(p);
        pedidoDAO.stopOperation(true);
    }
    
    public Pedido pedidoPorId(Object id) {
        pedidoDAO.startOperation();
        Pedido pedido = pedidoDAO.find(Pedido.class, id);
        pedidoDAO.stopOperation(false);
        
        return pedido;
    }
    
    public List<Pedido> listaPedidosAguardandoConta() {
        pedidoDAO.startOperation();
        List<Pedido> pedidos = pedidoDAO.buscaPedidosAguardandoConta();
        pedidoDAO.stopOperation(false);
        
        return pedidos;
    }
    
    public List<Pedido> listaPedidosPendentes() {
        pedidoDAO.startOperation();
        List<Pedido> pedidos = pedidoDAO.buscaPedidosPendentes();
        pedidoDAO.stopOperation(false);
        
        return pedidos;
    }
    
    public List<Pedido> listaPedidosEmPreparo() {
        pedidoDAO.startOperation();
        List<Pedido> pedidos = pedidoDAO.buscaPedidosEmPreparo();
        pedidoDAO.stopOperation(false);
        
        return pedidos;
    }
    
    public List<Pedido> listaPedidosPronto() {
        pedidoDAO.startOperation();
        List<Pedido> pedidos = pedidoDAO.buscaPedidosPronto();
        pedidoDAO.stopOperation(false);
        
        return pedidos;
    }
    
    public List<Pedido> listaPedidosEmPreparoEProntoPorMesa(int numero) {
        pedidoDAO.startOperation();
        List<Pedido> pedidos = pedidoDAO.buscaPedidosEmPreparoEProntoPorMesa(numero);
        pedidoDAO.stopOperation(false);
        
        return pedidos;
    }
    
    public List<Pedido> listaPedidosAtendidosPorMesa(int numero) {
        pedidoDAO.startOperation();
        List<Pedido> pedidos = pedidoDAO.recuperaPedidosAtendidosPorMesa(numero);
        pedidoDAO.stopOperation(false);
        
        return pedidos;
    }
    
    public List<Pedido> listaPedidosAtendidosProntosEPendentesPorMesa(int numero) {
        pedidoDAO.startOperation();
        List<Pedido> pedidos = pedidoDAO.recuperaPedidosAtendidosProntosEPendentesPorMesa(numero);
        pedidoDAO.stopOperation(false);
        
        return pedidos;
    }
    
    public List<Pedido> listaPedidosPorMesaAberta(int numero) {
        pedidoDAO.startOperation();
        List<Pedido> pedidos = pedidoDAO.recuperaListaPedidoPorMesaAberta(numero);
        pedidoDAO.stopOperation(false);
        
        return pedidos;
    }
    
    public boolean verificaSeTodosPedidosCanceladosPorMesa(int numero) {
        pedidoDAO.startOperation();
        boolean todosCancelados = pedidoDAO.verificaTodosPedidosCancelados(numero);
        pedidoDAO.stopOperation(false);
        
        return todosCancelados;
    }
    
    public boolean verificaSeExistePedidoContaAbertoPorMesa(int numero) {
        pedidoDAO.startOperation();
        boolean contaAberta = pedidoDAO.verificaPedidoContaAbertoPorMesa(numero);
        pedidoDAO.stopOperation(false);
        
        return contaAberta;
    }
    
    public boolean verificaSeStatusPedidoEhPendente(Long id) {
        pedidoDAO.startOperation();
        boolean ehPendente = pedidoDAO.verificaStatusPedido(id);
        pedidoDAO.stopOperation(false);
        
        return ehPendente;
    }
    
}
